package com.wu.qqclient.service;

import com.wu.qqcommon.Message;
import com.wu.qqcommon.MessageType;
import com.wu.qqcommon.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;


/*
2.该类完成用户登录验证以及用户注册
 */
public class UserClientService {

    //因为我们可能在其他地方使用到user信息，所以在这里做成成员属性
    private User user = new User();
    //因为我们可能在其他地方使用，所以在这里做成成员属性
    private Socket socket;

    public boolean checkUser(String userId, String passWd) {
        boolean b= false;
        //创建user对象
        user.setUserId(userId);
        user.setPassWd(passWd);

        //连接到服务器，发送user对象
        try {
            socket = new Socket(InetAddress.getByName("127.0.0.1"),9999);
            //得到我们的objectOutputStream对象
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(user); //发送对象到服务器端

            //读取服务器端返回的message数据对象
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            Message message = (Message) ois.readObject();

            //验证成功
            if (message.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCEED)){

                //创建一个和服务器端保持通讯的线程-->创建一个类 ClientConnectServerThread
                ClientConnectServerThread clientConnectServerThread = new ClientConnectServerThread(socket);
                //启动线程
                clientConnectServerThread.start();
                //为了客户端的拓展 我们将其用一个集合来管理
                ManageClientConnectServerThread.addClientConnectServerThread(userId,clientConnectServerThread);

                b = true;
            }else {
                //如果失败了，我们就不能启动线程，只要关闭socket就可以了
                socket.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return b;
    }

    //此方法对应-----------------------------------------System.out.println("\t\t 1 显示在线用户列表");
    public void onLineFriendList(){
        //首先要发送一个message，让服务器端知道我们需要的数据类型
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_GET_ONLINE_FRIEND);
        message.setSenter(user.getUserId());

        //发给服务器，要先获得当先线程的socket  以及它的OutPUststream对象
        try {
            ClientConnectServerThread clientConnectServerThread = ManageClientConnectServerThread.getClientConnectServerThread(user.getUserId());
            Socket socket = clientConnectServerThread.getSocket();
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(message);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //编写方法退出客户端，并给服务器发送一个退出的message
    public void logOut(){
        Message message = new Message();
        message.setSenter(user.getUserId());
        message.setMesType(MessageType.MESSAGE_CLIENT_EXIT);
        try {
            ClientConnectServerThread clientConnectServerThread = ManageClientConnectServerThread.getClientConnectServerThread(user.getUserId());
            Socket socket = clientConnectServerThread.getSocket();
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(message);
            System.out.println(user.getUserId()+"退出了系统。。。");
            System.exit(0);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}